package com.fx.service;

import com.fx.dao.RoleDao;
import com.fx.entity.Role;
import com.fx.entity.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.Assert;

import javax.transaction.Transactional;
import java.util.List;
import java.util.Optional;

/**
 * des:
 *
 * @author fxiao
 * @date 2020/12/11 17:55
 */
@Service
public class RoleService {
    @Autowired
    private RoleDao roleDao;
    @Transactional
    public void deleteById(Long id){
        roleDao.deleteById(id);
    }

    @Transactional
    public List<User> findUserByRold(Long roleId){
        Role role=roleDao.findById(roleId).get();
        role.getUsers().size();
        return role.getUsers();
    }

    /**
     * 更新Role对象，且更新角色和权限的关系<br>
     * 但hibernate默认的实现方式有点浪费资源，是采用先删除所有关系，然后再添加新关系的方式，所以就需要参数里的role需要是先前正确
     * 的关系。建议尽测试用，真实使用的时候建议通过写hql的方式以更合适的逻辑实现。
     * @param role
     * @return
     */
    @Transactional
    public Role update(Role role){
        Assert.notNull(role,"error：被更新的角色不能为null ！");
        if(role.getId()>0L){
            Optional<Role> roleOptional =roleDao.findById(role.getId());
            if(roleOptional.isPresent()){
                return roleDao.save(role);
            }
        }
        throw new RuntimeException("error：被更新的角色在库中找不到 ！");
    }

}
